<?php
declare (strict_types = 1);

namespace app\command;

use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use QL\QueryList;
use QL\Ext\Chrome;
use think\queue\job\Redis;

class curlbaidu extends Command
{
    protected function configure()
    {
        // 指令配置
        $this->setName('爬取百度搜索结果')
            ->setDescription('自动爬取百度搜索结果');
    }

    protected function execute(Input $input, Output $output)
    {
        #抓取网址
        $ql = QueryList::getInstance();
// 注册插件，默认注册的方法名为: chrome
        $ql->use(Chrome::class);
// 或者自定义注册的方法名
        $ql->use(Chrome::class,'chrome');

        $text = $ql->chrome(function ($page,$browser)use($ql) {
            $this->getList($ql,$page);
            //如果有需要，可以把$rt入库，以及做其他操作
            sleep(10);
            $browser->close();
            // 返回值一定要是页面的HTML内容
            # return $html;
        },[
            'headless' => false, // 启动可视化Chrome浏览器,方便调试
            'devtools' => false, // 打开浏览器的开发者工具
        ])->find('h1')->text();
    	// 指令输出
    	$output->writeln('爬取百度搜索结果');
    }


    /**获取列表数据
     * @param $ql
     * @param $page
     */
    public function getList($ql,$page){
        $page->goto('https://www.baidu.com');
        // 这里故意设置一个很长的延长时间，让你可以看到chrome浏览器的启动
        sleep(3);
        $size = 10;
        #从系统获取关键词
        $wd = '这是个简单的自动化搜索';
        $page->type("input[id='kw']",$wd);
        sleep(1);
        //点击搜索
        $page->click("input[type='submit']");

        //等待搜索结果
        sleep(3);
        //获取结果
        $html = $page->content();
        //用jquery选择器抽取结果
        $rules = array(
            'title'=>['#content_left h3 a','text'],//标题
            'url'=>['#content_left h3 a','href'],//跳转网址
            'description'=>['div .c-abstract','text'],//描述
        );
        $ql = QueryList::html($html);
        #列表结果
        $rt = $ql->rules($rules)->query()->getData();
        if(!empty($rt)){
            foreach ($rt as $val){
                var_dump($val);die;
            }
        }
        #
        $nextPage = $ql->find('div#page a.n')->text();
        echo '第1页'.PHP_EOL;
        $pages = 1;
        $pn = 0;
        while (strpos($ql->find('div#page a.n')->text(),'下一页') !== false){
            #点击下一页
            $pages =  $pages+1;
            $pn = $pn+$size;
            $page->goto("https://www.baidu.com/s?wd={$wd}&pn={$pn}&oq={$wd}");
            $html = $page->content();
            echo "第{$pages}页".PHP_EOL;
            sleep(3);
            $ql = QueryList::html($html);
            #列表结果
            $rt = $ql->rules($rules)->query()->getData();
            $nextPage = $ql->find('div#page a.n')->text();
            echo $nextPage.PHP_EOL;
        }

    }
}
